<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        div{padding:10px;margin:10px;border:solid 1px black;}
    </style>
</head>
<body>
    <div class="app">
        <h1>这是 - {{title}}</h1>

        <Child1></Child1>

        <Child2></Child2>
    </div>
</body>
<template id="child1Temp">
    <div>
        <h3>这是 - {{title}}</h3>
        <p>子组件的数据为：{{msg}}</p>
        <input type="button" value="向child2组件发送数据" @click="send">
        <p>兄弟发过来的数据：{{d}}</p>
    </div>
</template>
<template id="child2Temp">
    <div>
        <h3>这是 - {{title}}</h3>
        <p>子组件的数据为：{{msg}}</p>
        <input type="button" value="向child1组件发送数据" @click="send">
        <p>兄弟发过来的数据：{{d}}</p>
    </div>
</template>
<script src="../vue.global.js"></script>
<script>

    // 自定义事件系统：定义功能，触发功能

    // 收数据的一方：定义事件
    // 发数据的一方：触发事件

    const E = {
        msg:{},
        on(type, cb){
            if(this.msg[type]){
                this.msg[type].push(cb);
            }else{
                this.msg[type] = [cb];
            }
        },
        emit(type){
            if(!this.msg[type]) return;
            const arg = [...arguments].slice(1);
            this.msg[type].forEach(val=>{
                val(...arg);
            })
        }
    }
    // 复习，请查看js课程中观察者模式的讲解


    const app = Vue.createApp({
        data(){
            return {
                title: "根组件",
                d:""
            }
        },
        methods:{
            onMyEve(a){
                console.log(a)
                this.d = a;
            }
        },
        components:{
            Child1: {
                data(){
                    return {
                        title:"子组件1",
                        msg: "子组件1的数据",
                        d:""
                    }
                },
                template:"#child1Temp",
                // mounted() {
                //     E.emit("abc", this.msg);
                // },
                methods:{
                    send(){
                        E.emit("abc", this.msg);
                    }
                },
                created(){
                    E.on("qwe", (a)=>{
                        this.d = a
                    })
                }
            },
            Child2: {
                data(){
                    return {
                        title:"子组件2",
                        msg: "子组件2的数据",
                        d:""
                    }
                },
                template:"#child2Temp",
                created(){
                    E.on("abc", (a)=>{
                        this.d = a
                    })
                },
                methods:{
                    send(){
                        E.emit("qwe", this.msg);
                    }
                }
            }
        }
    })

    app.mount(".app");

</script>
</html>